package com.dou.cloud.bridge.redis.handler;



import com.due.basic.tookit.function.DueVoidProducer;

import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

/**
 * @Author daizl
 * @Date 2024 05 13 13 11
 **/
public interface DistributedLockHandler {

    /**
     * 尝试分布式锁，自定义等待时间、超时时间。
     *
     * @param supplier 业务逻辑
     * @param waitTime        获取锁最长等待时间
     * @param leaseTime       锁超时时间。超时后自动释放锁。
     * @param timeUnit        时间单位
     * @return 获取锁成功返回true，失败返回false。
     */
    <T> T tryLock(Supplier<Object> supplier, String key, long waitTime, long leaseTime, TimeUnit timeUnit);

    /**
     * 类型
     *
     * @return 类型
     */
    Integer getType();
}
